/*
 * @Author: linweizeng 2630208719@qq.com
 * @Date: 2025-02-07 10:16:21
 * @LastEditors: linweizeng 2630208719@qq.com
 * @LastEditTime: 2025-02-14 14:28:16
 * @FilePath: \forum\src\utils\request.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { ElMessage, ElMessageBox } from 'element-plus'
import store from './localStore'
//进行axios二次封装:使用请求与响应拦截器
import axios from 'axios'
import { getAppPort } from '@/utils/electron'

let timerShow = false
let port = 8002

const setAppPort = () =>{
  const appPort = getAppPort() || port
  port = appPort
}

setAppPort()

//第一步:利用axios对象的create方法,去创建axios实例(其他的配置:基础路径、超时的时间)
const baseURL = 'http://127.0.0.1:'+ port//'http://8.138.95.62:9999' // 'http://192.168.0.73:8081'  // 'http://127.0.0.1:'+ port
const request = axios.create({
  //基础路径
  baseURL, //基础路径上会携带/api
  timeout: 1000 * 60, //超时的时间的设置
})






//第二步:request实例添加请求与响应拦截器
request.interceptors.request.use((config) => {
  setAppPort()
  //获取用户相关的小仓库:获取仓库内部token,登录成功以后携带给服务器
//   const userStore = useUserStore()
//   if (userStore.token) {
//     config.headers.token = userStore.token
//   }
  //config配置对象,headers属性请求头,经常给服务器端携带公共参数
  //返回配置对象
  return config
})

//第三步:响应拦截器
request.interceptors.response.use(
  (response) => {
    //成功回调
    //简化数据
    return response.data
  },
  (error) => {
    //失败回调:处理http网络错误的
    //定义一个变量:存储网络错误信息
    let message = ''
    console.log(error)
    if(error.code == 'ERR_NETWORK'){
      ElMessage({
        type: 'error',
        message: `服务器异常`
      })
      return Promise.reject(error)
    }
    //http状态码
    const status = error.response.status
    switch (status) {
      case 401:
        message = 'TOKEN过期'
        break
      case 403:
        message = '无权访问'
        break
      case 404:
        message = '请求地址错误'
        break
      case 500:
        message = '服务器出现问题'
        break
      default:
        message = '网络出现问题'
        break
    }
    ElMessage({
      type: 'error',
      message
    })
    //提示错误信息
    return Promise.reject(error)
  },
)
//对外暴露
export default request
